package com.wangzhen.jvm;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * 内存泄漏代码演示
 * 1、在代码中while(true) 的向一个map中put数据
 * 2、map中的key-->Key,是一个对象，里面只有一个字段id，本义是如果id字段值相同的话，
 * 可以认为是同一个key，但是因为没有覆盖equal方法，导致即使是id相同，也会重复添加多次
 * 因为hashcode相同，但是equals不同（不覆盖默认比较内存地址）
 */
public class MemoryLeakDemo {

    static class Key {
        private Integer id;

        public Key(Integer id) {
            this.id = id;
        }

        /*@Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Key key = (Key) o;
            return Objects.equals(id, key.id);
        }
*/
        @Override
        public int hashCode() {
            return Objects.hash(id);
        }
    }

    public static void main(String[] args) {
        Map<Key, String> map = new HashMap<>();
        while (true) {
            for (int i = 0; i < 1000; i++) {
                map.put(new Key(i), String.valueOf(i));
            }
        }
    }


}
